setSortingEnabled(bool) : 設定是否開啟排序from PySide6.QtWidgets import QApplication , QWidget , QTableWidget , QVBoxLayout ,QTableWidgetItem , QHeaderView
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個10*5的表格
Table = QTableWidget()
Table.setRowCount(5)
Table.setColumnCount(5)
#啟用表格排序
Table.setSortingEnabled(True)
#添加元素
for rowIndex , row in enumerate(["3","2","5","4","1"]):
for columnIndex , item in enumerate(row):
Table.setItem(rowIndex, columnIndex , QTableWidgetItem(item))
self.resize(600,600)
layout = QVBoxLayout()
layout.addWidget(Table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()
setHorizontalHeaderLabels([str]) or setVerticalHeaderLabels([str]) : 用來設置水平或垂直的表頭標籤。from PySide6.QtWidgets import QApplication , QWidget , QTableWidget , QVBoxLayout ,QTableWidgetItem
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個10*5的表格
Table = QTableWidget()
Table.setRowCount(5)
Table.setColumnCount(5)
#設置表頭
Table.setHorizontalHeaderLabels(["colume1","colume2","colume3","colume4","colume5"])
Table.setVerticalHeaderLabels(["row1","row2","row3","row4","row5"])
#添加元素
data = [[str(i) for i in range(5)],[str(i) for i in range(5,10)]]
for rowIndex , row in enumerate(data):
for columnIndex , item in enumerate(row):
Table.setItem(rowIndex, columnIndex , QTableWidgetItem(item))
self.resize(600,600)
layout = QVBoxLayout()
layout.addWidget(Table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode) : 用來設置表頭的列寬自動調整方式,通常會配合 QHeaderView.ResizeMode 使用,常用的有兩種| 功能 | 方法 |
|---|---|
| 將所有列平分可用空間。 | QHeaderView.ResizeMode.Stretch |
| 根據每列的內容自動調整列寬。 | QHeaderView.ResizeMode.ResizeToContents |
下面範例是使用 ResizeToContents 來作範例。
from PySide6.QtWidgets import QApplication , QWidget , QTableWidget , QVBoxLayout ,QTableWidgetItem , QHeaderView
class Mywindow(QWidget):
def __init__(self):
super().__init__()
#建立一個10*5的表格
Table = QTableWidget()
Table.setRowCount(5)
Table.setColumnCount(5)
#設置表頭
Table.setHorizontalHeaderLabels(["colume1","colume2","colume3","colume4","colume5"])
Table.setVerticalHeaderLabels(["row1","row2","row3","row4","row5"])
#設置表頭伸縮
Table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.ResizeToContents) #如果窗口還有空間,會把它填滿。
#添加元素
for rowIndex , row in enumerate([["111111111111111111111","2","3","444444444","5"],["6666666666666","","8","9999999999","10"]]):
for columnIndex , item in enumerate(row):
Table.setItem(rowIndex, columnIndex , QTableWidgetItem(item))
self.resize(600,600)
layout = QVBoxLayout()
layout.addWidget(Table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = Mywindow()
window.show()
app.exec()

setEditTriggers(QAbstractItemView.EditTrigger) : 設置編輯觸發條件。有三種選擇。| 觸發功能 | 方法 |
|---|---|
| 禁止編輯 | QAbstractItemView.EditTrigger.NoEditTriggers |
| 雙擊觸發編輯 | QAbstractItemView.EditTrigger.DoubleClicked |
| 允許所有編輯 | QAbstractItemView.EditTrigger.AllEditTriggers |
setSpan(int row, int column, int rowSpan, int columnSpan):合併指定的行列範圍。from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 創建一個 5x5 的表格
Table = QTableWidget()
Table.setRowCount(5)
Table.setColumnCount(5)
# 填充數據
for row in range(5):
for col in range(5):
item = QTableWidgetItem(f"Item {row},{col}")
Table.setItem(row, col, item)
# 合併 (1,1) 到 (2,2) 的單元格 (2行2列範圍)
Table.setSpan(1, 1, 2, 2)
layout = QVBoxLayout()
layout.addWidget(Table)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec()

item(row,col) : 用來獲取指定位置的 TableWidgetItem。setText(str) : 設置 QTableWidgetItem 的內容。selectedItems() : 返回所有被選中的 QTableWidgetItem 的列表。setBackground(Qt.GlobalColor) : 設置 QTableWidgetItem 的背景顏色,使用 Qt.GlobalColor 來指定顏色。from PySide6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget ,QPushButton
from PySide6.QtCore import Qt
class MyWindow(QWidget):
def __init__(self):
super().__init__()
#建立按鈕
Btn = QPushButton("改變顏色")
# 創建一個 5x5 的表格
self.Table = QTableWidget()
self.Table.setRowCount(5)
self.Table.setColumnCount(5)
# 填充數據
for row in range(5):
for col in range(5):
item = QTableWidgetItem(f"Item {row},{col}")
self.Table.setItem(row, col, item)
#觸發信號
Btn.clicked.connect(self.ChnColor)
#布局
layout = QVBoxLayout()
layout.addWidget(self.Table)
layout.addWidget(Btn)
self.setLayout(layout)
def ChnColor(self) :
for item in self.Table.selectedItems() :
self.Table.item(item.row() , item.column()).setText("紅色")
self.Table.item(item.row() , item.column()).setBackground(Qt.GlobalColor.red)
if __name__ == "__main__":
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
#總結
| 功能 | 方法 |
|---|---|
| 設定排序 | setSortingEnabled(bool) |
| 功能 | 方法 |
|---|---|
| 設置水平的表頭 | setHorizontalHeaderLabels([str]) |
| 設置垂直的表頭 | setVerticalHeaderLabels([str]) |
| 調整表格列寬 | horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode) |
| 設置編輯觸發條件 | setEditTriggers(QAbstractItemView.EditTrigger) |
| 合併指定行列 | setSpan(int row, int column, int rowSpan, int columnSpan) |
| 獲取指定TableWidgetItem | item(row,col) |
| 設置TableWidgetItem內容文字 | setText(str) |
| 返回所有選重的表格 | selectedItems() |
| 設置表格背景 | setBackground(Qt.GlobalColor) |